package xyz.weblade.lynchmybatis;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import java.io.IOException;
import java.io.InputStream;
import java.util.List;



public class LynchMybatisApplication {

	public static void main(String[] args) {

		//第一阶段，Mybatis的初始化阶段
		String resource = "mybatis-config.xml";
		//得到配置文件的输入流
		InputStream inputStream = null;
		try{
			inputStream = Resources.getResourceAsStream(resource);
		}catch (IOException e){
			e.printStackTrace();
		}
		//得到 SqlSessionFactory [完成了配置文件的读取，包括mapper，mapper里面的语句完成了各种MapperStatement对象的创建]
		//这里拿到的是DefaultSqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


		try(SqlSession session = sqlSessionFactory.openSession(false)){
			UserMapper userMapper = session.getMapper(UserMapper.class);
			User user = new User();
			user.setName("陈奕迅");
			user.setEmail("cyx@qq.com");
			user.setAge(18);
			userMapper.queryUserByUserMsg(user);
			session.commit();
		/*	UserMapper userMapper = session.getMapper(UserMapper.class);
			userMapper.queryUserByUserMsg("陈奕迅","cyx@qq.com",18);*/
		}


		//第二阶段：数据读写阶段
		//创建一个SQLSession，包括了事务管理器，执行器等等，我所见的几乎都是多例模式，就是拿到的是一个新的对象
		//这里的session是DefaultSqlSession
	   /*try(SqlSession session = sqlSessionFactory.openSession(false)){
			//找到接口对应的实现类
			//根据接口class，最后拿到一个代理类，用这代理类去执行数据库操作
		   // 创建一个UserMapper代理对象，这个代理对象的代理逻辑是写在了MapperProxy的invoke里面，因为这个对象继承了Invocation
			UserMapper userMapper = session.getMapper(UserMapper.class);
			//调用接口展开数据库操作
		    //这个过程先是
		  //List<User> userList = userMapper.queryUserBySchoolName("广东海洋大学");
		   //userMapper.updateUserById(new User(1,"林奇","xxxxx@l",100,1,"北海"),"2");
		   User user = new User();
		   user.setName("陈奕迅");
		   user.setEmail("cyx@qq.com");
		   user.setAge(18);
		   userMapper.queryUserByUserMsg(user);
		  //List<User> userList2 = userMapper.queryUserBySchoolName("广东海洋大学");
		   //List<User> userList3 = userMapper.queryUserBySchoolName("广东海洋大学","陈奕迅","1");
			//让程序卡在这里
		   //userList.forEach(u -> System.out.println("name:"+u.getName()+"--|--"+"email:"+u.getEmail()+"--|--"+"schoolName:"+u.getSchoolName()));
		   *//*User user = new User();
		   user.setName("物料");
		   userMapper.updateUserById(user,"2");*//*
			//打印查询结果
			*//*for (User u : userList){
				System.out.println("name1:"+u.getName()+"--|--"+"email:"+u.getEmail()+"--|--"+"schoolName:"+u.getSchoolName());
			}*//*

		   *//*for (User u : userList2){
			   System.out.println("name2:"+u.getName()+"--|--"+"email:"+u.getEmail()+"--|--"+"schoolName:"+u.getSchoolName());
		   }*//*
			session.commit();
		   *//*for (User u : userList3){
			   System.out.println("name3:"+u.getName()+"--|--"+"email:"+u.getEmail()+"--|--"+"schoolName:"+u.getSchoolName());
		   }*//*
		}*/
	}

}
